package cn.iocoder.yudao.module.project.service.constructionunit;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.project.controller.admin.constructionunit.vo.*;
import cn.iocoder.yudao.module.project.dal.dataobject.constructionunit.ConstructionUnitDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.lang.Nullable;

/**
 * 施工单位 Service 接口
 *
 * @author 芋道源码
 */
public interface ConstructionUnitService {

    /**
     * 创建施工单位
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createConstructionUnit(@Valid ConstructionUnitSaveReqVO createReqVO);

    /**
     * 更新施工单位
     *
     * @param updateReqVO 更新信息
     */
    void updateConstructionUnit(@Valid ConstructionUnitSaveReqVO updateReqVO);

    /**
     * 删除施工单位
     *
     * @param id 编号
     */
    void deleteConstructionUnit(Long id);

    /**
    * 批量删除施工单位
    *
    * @param ids 编号
    */
    void deleteConstructionUnitListByIds(List<Long> ids);

    /**
     * 获得施工单位
     *
     * @param id 编号
     * @return 施工单位
     */
    ConstructionUnitDO getConstructionUnit(Long id);

    /**
     * 获得施工单位分页
     *
     * @param pageReqVO 分页查询
     * @return 施工单位分页
     */
    PageResult<ConstructionUnitDO> getConstructionUnitPage(ConstructionUnitPageReqVO pageReqVO);

    /**
     * 获得符合条件的施工单位列表
     *
     * @param ids 施工单位编号数组。如果为空，不进行筛选
     * @param statuses 状态数组。如果为空，不进行筛选
     * @return 施工单位列表
     */
    List<ConstructionUnitDO> getConstructionUnitList(@Nullable Collection<Long> ids,
                             @Nullable Collection<Integer> statuses);
}